'''
    服务之服务器简述：
        连接请求对象数组的各个元素，并以对应字符分割并返回响应

    服务端需要完成的任务：
        创建服务端并且链接回调函数
        回调函数需要 request 和 response 作为必要参数且返回 response
        回调函数中需要对二者的 子参数 进行操作

        测试服务：ros2 service call /Srv_LinkStr my_interfaces/srv/MyHello "{pre: "Hello",obj: "czh"}"
                                    服务名              自定义服务接口          传入参数（注意空格位置）
'''

import rclpy
from rclpy.node import Node
from my_interfaces.srv import MyHello


class Linker(Node):
    def __init__(self, name):
        super().__init__(name)
        self.create_service(MyHello, "Srv_LinkStr", self.link_callback)     # 服务端需要设定回调函数处理随时到来的请求
        self.get_logger().info("Node already start!")

    def link_callback(self, request, response):                             # 回调函数需要以 request、response作为参数
        # response.linked = request.pre + request.obj                         # 调取参数的子属性（接口自定义）并完成运算
        response.linked = '-'.join(request.link)                            # 连接列表各元素并用-分隔
        self.get_logger().info("Request done !")
        return response                                                     # 返回响应对象


def main(args=None):
    rclpy.init(args=args)
    node = Linker("linker_server")
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()